package com.itheima.model.admin.pojos;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * OAuth第三方登录绑定实体类
 * 
 * @author itheima
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_oauth_binding")
public class OAuthBinding implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    @TableId(type = IdType.AUTO)
    private Integer id;

    /**
     * 管理员ID
     */
    private Integer adminId;

    /**
     * OAuth类型：WECHAT, QQ, GITHUB等
     */
    private String oauthType;

    /**
     * 第三方平台的用户唯一标识（openid）
     */
    private String oauthId;

    /**
     * 第三方平台的用户名/昵称
     */
    private String oauthName;

    /**
     * 第三方平台的头像URL
     */
    private String oauthAvatar;

    /**
     * 访问令牌
     */
    private String accessToken;

    /**
     * 刷新令牌
     */
    private String refreshToken;

    /**
     * access_token过期时间（秒）
     */
    private Integer expiresIn;

    /**
     * 绑定时间
     */
    private LocalDateTime bindTime;

    /**
     * 最后使用时间
     */
    private LocalDateTime lastUseTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

    // ============ 扩展字段（非数据库字段） ============
    
    /**
     * 微信UnionID（用于多应用统一用户标识）
     * 存储在 oauthName 字段中
     */
    @TableField(exist = false)
    private String unionId;

    // ============ 别名方法（为了兼容性） ============
    
    public String getProvider() {
        return this.oauthType;
    }

    public void setProvider(String provider) {
        this.oauthType = provider;
    }

    public String getOpenId() {
        return this.oauthId;
    }

    public void setOpenId(String openId) {
        this.oauthId = openId;
    }

    public String getUnionId() {
        return this.unionId;
    }

    public void setUnionId(String unionId) {
        this.unionId = unionId;
    }

    public LocalDateTime getCreatedTime() {
        return this.bindTime;
    }

    public void setCreatedTime(LocalDateTime createdTime) {
        this.bindTime = createdTime;
    }
}

